/*
 * ListaHistorial.java
 *
 * Created on Oct 8, 2008, 5:56:49 PM
 */
package wasolicitudesfiec.general;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import entidad.apertura.Solicitudaperturapostgrado;
import entidad.apertura.Solicitudaperturatopico;
import entidad.ayudantias.Solicitudayudantia;
import entidad.ayudantias.Solicitudserayudante;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import entidad.convalidacionMateria.Solicitudconvalidacionmateria;
import hero.interfaces.ProjectSession;
import hero.interfaces.UserSession;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.convert.DateTimeConverter;
import javax.servlet.http.HttpServletResponse;
import wasolicitudesfiec.RequestBean1;
import wasolicitudesfiec.ApplicationBean1;
import wasolicitudesfiec.Menu;
import wasolicitudesfiec.SessionBean1;
import wasolicitudesfiec.general.Dp_ProcesosEnCurso;
import web.util.Constantes;
import wasolicitudesfiec.logicacontrol.Logica;
import wasolicitudesfiec.logicacontrol.LogicaHistorial;
import wasolicitudesfiec.plantillas.PanelIzquierdo;
import wasolicitudesfiec.registros.Rg_Solicitud;
import web.util.ManejadorCookies;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author kabad
 */
public class ListaHistorial extends AbstractPageBean {

    private Dp_ProcesosEnCurso dp_ProcesosEnCurso = new Dp_ProcesosEnCurso();
    private boolean tieneProcesos;
    private LogicaHistorial logicaHistorial;
    private Logica logica;
	private HttpServletResponse response;
	private String contextPath;
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
        dateTimeConverter1.setTimeZone(java.util.TimeZone.getTimeZone("America/Guayaquil"));
        dateTimeConverter1.setPattern("dd/MM/yyyy H:mm");
        dateTimeConverter1.setLocale(new java.util.Locale("es", "EC", ""));
    }
    private DateTimeConverter dateTimeConverter1 = new DateTimeConverter();

    public DateTimeConverter getDateTimeConverter1() {
        return dateTimeConverter1;
    }

    public void setDateTimeConverter1(DateTimeConverter dtc) {
        this.dateTimeConverter1 = dtc;
    }

    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public ListaHistorial() {
    }

     @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        try {
            _init();
        } catch (Exception e) {
            log("ListaHistorial Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }
		response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
		contextPath = getFacesContext().getExternalContext().getRequestContextPath();
        logicaHistorial = new LogicaHistorial();
        logica = new Logica();
        ProjectSession projectSession = logica.getProjectSession();
        UserSession userSession = logica.getUserSession();
        Vector<Rg_Solicitud> listaProcesosHistorial;
        Vector<Rg_Solicitud> listaRgSolicitudes = new Vector<Rg_Solicitud>();
        Rg_Solicitud rg_solicitud;
        Solicitudayudantia solicitudAyudantia = null;
        Solicitudserayudante solicitudserayudante = null;
        Solicitudcambiocarrera solicitudcambiocarrera = null;
        Solicitudconvalidacionmateria solicitudconvalidacionmateria = null;
          Solicitudaperturatopico solicitudaperturatopico = null;
            Solicitudaperturapostgrado solicitudaperturapostgrado = null;
        this.getMenu().setTitulo("Historial de Solicitudes");
		FacesMessage message = null;

        try {
            if (!(userSession != null && projectSession != null)) {
                throw new Exception();
            }
            listaProcesosHistorial = logicaHistorial.leerProcesosHistorialPorUsuario((String) userSession.getUser());
            if (listaProcesosHistorial.isEmpty()) {
                this.setTieneProcesos(false);
				ManejadorCookies.agregarCookieMensaje(response, "Actualmente no posee solicitudes en historial.", contextPath+"/faces/general/Mensaje.jsp");
				getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContext(), null, "mensaje");
				getFacesContext().responseComplete();
            } else {
                this.setTieneProcesos(true);

                for (Rg_Solicitud instancia : listaProcesosHistorial) {
                    String nombreInstancia = instancia.getNombreinstanciaproceso();
                    int indice = nombreInstancia.indexOf("_");
                    String modelo = nombreInstancia.substring(0, indice);
                    rg_solicitud = new Rg_Solicitud();
                    int idSolicitud = Integer.parseInt(logicaHistorial.leerPropiedadporProceso(instancia.getIdSolicitud(), Constantes.Atributo.idSolicitudProceso));
                    if (modelo.equals(Constantes.Modelo.modelo_SolicitarAyudantes)) {
                       solicitudAyudantia = logica.getLogAyudantia().leerSolicitudayudantiaNivel2(idSolicitud);
                        solicitudAyudantia.setRolSolicitante("Profesor");
                        rg_solicitud = solicitudAyudantia;

                    }
                    if (modelo.equals(Constantes.Modelo.modelo_SolicitarSerAyudante)) {
                        solicitudserayudante = logica.getLogAyudantia().leerSolicitudserayudanteNivel2(idSolicitud);
                        solicitudserayudante.setRolSolicitante("Estudiante");
                        rg_solicitud = solicitudserayudante;
                    }
                    if (modelo.equals(Constantes.Modelo.modelo_SolicitarCambioCarrera)) {
                        solicitudcambiocarrera = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
                        solicitudcambiocarrera.setRolSolicitante("Estudiante");
                        rg_solicitud = solicitudcambiocarrera;
                    }
                    if (modelo.equals(Constantes.Modelo.modelo_SolicitarConvalidacionMateria)) {
                        solicitudconvalidacionmateria = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitud);
                        solicitudconvalidacionmateria.setRolSolicitante("Estudiante");
                        rg_solicitud = solicitudconvalidacionmateria;
                    }
                      if (modelo.equals(Constantes.Modelo.modelo_SolicitarAperturaTopico)) {
                        solicitudaperturatopico = logica.getLogAperturaTopico().leerSolicitudAperturaNivel2(idSolicitud);
                        solicitudaperturatopico.setRolSolicitante("Profesor");
                        rg_solicitud = solicitudaperturatopico;
                    }
                      if (modelo.equals(Constantes.Modelo.modelo_SolicitarAperturaPostgrado)) {
                        solicitudaperturapostgrado = logica.getLogAperturaPostgrado().leerSolicitudAperturaNivel2(idSolicitud);
                        solicitudaperturapostgrado.setRolSolicitante("Profesor");
                        rg_solicitud = solicitudaperturapostgrado;
                    }
                    rg_solicitud.setModelo(modelo);
                     rg_solicitud.setIdSolicitud(idSolicitud);
                    rg_solicitud.setSolicitante(logica.leerPersonaPorUsuario(instancia.getSolicitante()).toString());
                    listaRgSolicitudes.add(rg_solicitud);               
                }
            }
            this.getDp_ProcesosEnCurso().setListaRgSolicitudes(listaRgSolicitudes);
        } catch (Exception ex) {
            Logger.getLogger(ListaProcesosEnCurso.class.getName()).log(Level.SEVERE, null, ex);
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), "");
			getFacesContext().addMessage(null, message);
        }
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
        if (getPanelIzquierdo() != null) {
            getPanelIzquierdo().miPrerender();
        }
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    public boolean isTieneProcesos() {
        return tieneProcesos;
    }

    public void setTieneProcesos(boolean tieneProcesos) {
        this.tieneProcesos = tieneProcesos;
    }

    public Dp_ProcesosEnCurso getDp_ProcesosEnCurso() {
        return dp_ProcesosEnCurso;
    }

    public void setDp_ProcesosEnCurso(Dp_ProcesosEnCurso dp_ProcesosEnCurso) {
        this.dp_ProcesosEnCurso = dp_ProcesosEnCurso;
    }

    public Menu getMenu() {
        return (Menu) getBean("SolicitudesFIEC$Menu");
    }

    protected PanelIzquierdo getPanelIzquierdo() {
        return (PanelIzquierdo) getBean("plantillas$PanelIzquierdo");
    }
}

